package com.demo.springcloud.controller;

import com.alibaba.csp.sentinel.annotation.SentinelResource;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.Date;
import java.util.concurrent.TimeUnit;

/**
 * @author chenyuan
 * @date 2020/12/20 14:55
 */
@RestController
@Slf4j
public class FlowLimitController {
	@GetMapping("/testA")
	public String testA() {
		System.out.println("===== 正在处理~" + new Date());
		return "------testA";
	}

	@GetMapping("/testB")
	public String testB() {
		return "------testB";
	}

	@GetMapping("/testD")
	public String testD() {

//        log.info("testD 慢调用比例");
//        try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); }

		log.info("testD 异常比例");
		int a = 10 / 0;

		return "------testD";
	}

	@GetMapping("/testHotKey")
	@SentinelResource(value = "testHotKey", blockHandler = "deal_testHotKey")
	public String hotKeyTest(@RequestParam(value = "p1", required = false) String p1,
	                         @RequestParam(value = "p2", required = false) String p2) {
		if (p1 != null) {
			System.out.println("=== " + new Date() + " ===" + p1);
		}

		return "===== (*^_^*) 成功了 (*^_^*) =====";
	}

	public String deal_testHotKey(String p1, String p2, BlockException exception) {
		return "===== (ㄒoㄒ) 失败了 (ㄒoㄒ) =====";
	}
}
